/**
 * 根据对象生成 url 中的查询参数字符串，并将其拼接到 url 后面
 *
 * @param {string} url 未拼接查询参数字符串的 url
 * @param {Record<string, any>} obj 对象类型的查询参数，对于名称为空（包括 undefined、null、空字符串）的项，将被忽略
 * @returns {string} 拼接好查询参数字符串的 url
 */
export const genUrlQueryByObj = (url: string, obj: Record<string, any>): string => {
  // 处理到对象中第几个属性
  let objPropCnt = 0
  // 向 url 中添加查询参数
  for (const key in obj) {
    // 对于 Query 参数名称为空的项，跳过
    if (key === undefined || key === null || key.length <= 0) continue
    objPropCnt++
    if (objPropCnt === 1) url += "?"
    else url += "&"
    url += `${key}=${obj[key]}`
  }
  return url
}

/**
 * 根据 Query 参数名称和值组成的数组列表生成 url 中的查询参数字符串，并将其拼接到 url 后面
 *
 * @param {string} url 未拼接查询参数字符串的 url
 * @param {Array<[string, any]>} arrList Query 参数名称和值组成的数组列表
 * @returns {string} 拼接好查询参数字符串的 url
 */
export const genUrlQueryByArrList = (url: string, arrList: Array<[string, any]>) => {
  // 处理到第几个 Query 参数数组
  let queryArrCnt = 0
  // 向 url 中添加查询参数
  for (const queryArr of arrList) {
    // 对于 Query 参数名称为空的项，跳过
    if (queryArr[0] === undefined || queryArr[0] === null || queryArr[0].length <= 0) continue
    queryArrCnt++
    if (queryArrCnt === 1) url += "?"
    else url += "&"
    url += `${queryArr[0]}=${queryArr[1]}`
  }
  return url
}
